#include <stdio.h>
#include <string.h>

//第一种结构体数组的用法
struct student
{
    int   number  ; //学号
    char  name[20] ; //保存姓名
    char  sex[10]  ; //male female
    int   age     ; //年龄
    float score   ; //成绩
};

int main(int argc, char const *argv[])
{
    struct student stu1 = {1,"liu" ,"male"  ,20,98};
    struct student stu2 = {2,"zhao","female",21,94};
    struct student stu3 = {3,"sun" ,"male"  ,22,87};
    
    struct student *psut;   // pstu 是结构体类型的指针 , 简称结构体指针
    psut = &stu1;

    // *pstu 是就是这个变量,这个变量就是stu1 , *pstu 和stu1 是等价的
    // *pstu.number 这样写的话, 会有一个优先级的问题 , .的优先级比* 高, 因此先计算了. , 这样写会报错
    // 解决办法就是控制优先级, 使用()
    // (*pstu).number
    // (*pstu).number 这个写法显得不精练, C语言提供了一种精炼写法   pstu->number
    // (*pstu).number 和 pstu->number 两种用法等价 , 一定要理解, 后面用的尤其多 
    printf("stu1 的信息:\n");
    printf("stu1.number:      %d\n",psut->number);
    printf("stu1.name  :      %s\n",psut->name  );
    printf("stu1.sex   :      %s\n",psut->sex   );
    printf("stu1.age   :      %d\n",psut->age   );
    printf("stu1.score :      %f\n",psut->score );

    psut = &stu2;
    printf("stu2 的信息:\n");
    printf("stu2.number:      %d\n",psut->number);
    printf("stu2.name  :      %s\n",psut->name  );
    printf("stu2.sex   :      %s\n",psut->sex   );
    printf("stu2.age   :      %d\n",psut->age   );
    printf("stu2.score :      %f\n",psut->score );

    psut = &stu3;
    printf("stu3 的信息:\n");
    printf("stu3.number:      %d\n",psut->number);
    printf("stu3.name  :      %s\n",psut->name  );
    printf("stu3.sex   :      %s\n",psut->sex   );
    printf("stu3.age   :      %d\n",psut->age   );
    printf("stu3.score :      %f\n",psut->score );

    return 0;
}
